/******************************************************************************

		dkanwin.cpp \212\117\214\360\201\105\212\251\215\220\203\105\203\102\203\223\203\150\203\105

										1998.4.16	KEN.KURATANI

******************************************************************************/

#include "stdafx.h"
#include "maincmd.h"
#include "san6view.h"
#include "gaikou.h"
#include "dgaiwin.h"
#include "dkanwin.h"
#include "comsub.h"
#include "msg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char BASED_CODE THIS_FILE[] = __FILE__;
#endif


IMPLEMENT_DYNAMIC(GaikouKankokuWindow, GaikouWindow);

#undef	CURRENTCLASS
#define	CURRENTCLASS	GaikouKankokuWindow

BEGIN_MESSAGE_MAP(GaikouKankokuWindow, GaikouWindow)
	//{{AFX_MSG_MAP(GaikouKankokuWindow)
	ON_COMMAND(ID_KANKOKU_OK, OnOk)
	ON_COMMAND(ID_KANKOKU_CANCEL, OnCancel)
	ON_COMMAND(ID_KANKOKU_KUNSHU, OnKunshu)
	ON_COMMAND(ID_KANKOKU_BUSHOU, OnBushou)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()


#if	defined( _PC )	// for Overlay
GaikouKankokuWindow::GaikouKankokuWindow()
{
}

GaikouKankokuWindow::~GaikouKankokuWindow()
{
}
#endif

const	INT	KANKOKU_WIN_WX	= 144 + 8;
const	INT	KANKOKU_WIN_WY	= 120 + 8;
const	INT	KANKOKU_WIN_SX	= 12 - 4;
const	INT	KANKOKU_WIN_SY	= 12 - 4;
const	INT	KANKOKU_WIN_DX	= KANKOKU_WIN_SX + KANKOKU_WIN_WX;
const	INT	KANKOKU_WIN_DY	= KANKOKU_WIN_SY + KANKOKU_WIN_WY;

char*	GaikouKankokuWindow::m_strBtn[KANKOKU_BTN_MAX] = {
	"\214\121\227\131", "\225\220\217\253", "\214\210\222\350", "\222\206\216\176"
};

POINT	GaikouKankokuWindow::m_poBtn[KANKOKU_BTN_MAX] = {
	{4 + 4, 36 + 4},
	{4 + 4, 60 + 4},
	{20 + 4, 92 + 4},
	{84 + 4, 92 + 4},
};

CtrlLayout		GaikouKankokuWindow::ctrlLayout[KANKOKU_LAYOUT_MAX];
DialogLayout	GaikouKankokuWindow::Layout = {
	WINID_GAIKOUWIN, "GaikouKankokuWindow", {KANKOKU_WIN_SX, KANKOKU_WIN_SY, KANKOKU_WIN_DX, KANKOKU_WIN_DY},
	WS_POPUP|WS_BORDER, MAINTRANSMODE, DEFAULT_BACK, KANKOKU_LAYOUT_MAX, ctrlLayout
};

/* \203\214\203\103\203\101\203\105\203\147 */
VOID	GaikouKankokuWindow::InitialCtrlLayout(VOID)
{
	INT	i;
/* \203\173\203\136\203\223 */
	INT	num = 0;
	INT	IDnum = ID_GAIKOU_BTN_START;
	INT	IMnum = 0;
	for ( i = 0 ; i < KANKOKU_BTN_MAX ; i++ ) {
#if	defined( _PC )
		CPoint	po = m_poBtn[i];
#else	// defined( _PC )
		POINT	po = m_poBtn[i];
#endif	// defined( _PC )
		MakeSysButtonState1(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), m_strBtn[i], po.x, po.y);
		IMnum++;
	}
/* \202\163\202\144\202\167\202\163 */
	IDnum = ID_GAIKOU_TEXT_START;
	/* \203\136\203\103\203\147\203\213 */
	MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), "\212\251\215\220", 4 + 4, 4 + 4);
	IMnum++;
	/* \225\113\227\166\213\103\227\315 */
	MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), "\213\103\227\31540", 92 + 4, 8 + 4);
	IMnum++;
	/* \214\121\227\131 */
	if ( ACTIVE(m_pkkTgt) ) {
		MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), (char*)m_pkkTgt->strName(), 44 + 4, 40 + 4);
	}
	else {
		MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), (char*)strNameNull4, 44 + 4, 40 + 4);
	}
	IMnum++;
	/* \225\220\217\253 */
	if ( ACTIVE(m_pkb) ) {
		MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), (char*)m_pkb->strName(), 44 + 4, 64 + 4);
	}
	else {
		MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), (char*)strNameNull4, 44 + 4, 64 + 4);
	}
	IMnum++;
	ASSERT(KANKOKU_LAYOUT_MAX == num);
	ASSERT(KANKOKU_LAYOUT_MAX == IMnum);
}

static
INT	_sort_func_kankoku(BPtr pkb)
{
	INT	kazu = pkb->iMiryoku() + (pkb->iSeiji() * 2);
	if ( pkb->isKoushou() ) {
		kazu = muldiv(kazu, 3, 2);
	}
	return kazu;
}

BOOL GaikouKankokuWindow::InitData(TPtr pkt, MainCommand* pMainCmd, CWnd* pParentWnd)
{
	CGameDoc* pDoc = ::GetSan6App().GetDocument();
	ASSERT(pDoc != NULL);
	m_pParentWnd = pParentWnd;
	m_pDlgLayout = &Layout;
	m_iOkBtnID = ID_KANKOKU_OK;
	if ( NOTACTIVE(pkt) ) {
		return FALSE;
	}
	m_pMainCommand = pMainCmd;
	m_pkt = pkt;
	m_pkk = pkt->pkkShozoku();
	if ( NOTACTIVE(m_pkk) ) {
		return FALSE;
	}
	m_GaikouType = GAIKOU_KANKOKU;		/* \212\251\215\220 */
	m_BtnMax = KANKOKU_BTN_MAX;			/* \203\173\203\136\203\223\202\154\202\140\202\167 */
	m_TextMax = KANKOKU_TEXT_MAX;		/* \202\163\202\144\202\167\202\163 \202\154\202\140\202\167 */
	GaikouWindow::InitData();
	if ( 0 == m_pMainCommand->PickKankokuBushou(m_pkk, &m_BList) ) {
		return FALSE;
	}
	if ( 0 == m_pMainCommand->PickKankokuKunshu(m_pkk, &m_KList) ) {
		return FALSE;
	}
	m_BList.Sort(_sort_func_kankoku);
	return TRUE;
}

/* \203\136\203\103\203\147\203\213 */
VOID	GaikouKankokuWindow::SetTitle(VOID)
{
	UserCommandWindow::SetTextImage(&m_TextCtrl[0], "\212\251\215\220");	/* \203\173\203\136\203\223\202\314\203\166\203\214\201\133\203\147 */
	m_TextCtrl[1].SetPlate(TEXT_PLATE32, FALSE);
	if ( UINT_MAX == m_unCtrlID ) {
		SelectCommand(ID_KANKOKU_KUNSHU);
		m_unCtrlID = ID_KANKOKU_KUNSHU;
	}
	ReviseFocus();						/* \203\164\203\110\201\133\203\112\203\130\217\103\220\263 */
	EnableOkButton(ID_KANKOKU_OK);			/* \202\156\202\152\203\173\203\136\203\223 */
}

VOID	GaikouKankokuWindow::SetKankoku(VOID)
{
	if ( pkbNull == m_pkb ) {
		ASSERT(FALSE);
		return;
	}
	if ( pkkNull == m_pkkTgt ) {
		ASSERT(FALSE);
		return;
	}
	InitGaikouDataConfig();					/* \212\117\214\360\203\146\201\133\203\136\217\211\212\372\211\273 */
	SetGaikouData(&GaikouDataCfg);
}

/*****************************************************************************/
static	K_PARAM	kankoku_k_param[] = {
	KP_NAME,
	KP_TOTALHEISHI,
	KP_TEKITAI,
	KP_DOUMEI,
	KP_JUUZOKUKUNSHU,
	KP_RANK,
	KP_NONE
};

/* \214\360\217\302\214\116\216\345\221\111\221\360 */
VOID	GaikouKankokuWindow::SelectKunshu(VOID)
{
	KPtr	pkk, pkkOld;

	pkkOld = m_pkkTgt;
	pkk = SelectKunshuSingle(m_KList, kankoku_k_param, strNull);
	if ( pkkNull == pkk ) {
		return;
	}
	m_pkkTgt = pkk;
	if ( pkkOld != pkk ) {
		InitRank();						/* \212\257\210\312\217\211\212\372\211\273 */
	}
//	DspButton();
//	DspData();							/* \203\146\201\133\203\136\225\134\216\246 */
}

/* \214\116\216\345\221\111\221\360 */
void	GaikouKankokuWindow::OnKunshu(GaikouKankokuWindow* pThis)
{
	pThis->m_unCtrlID = ID_KANKOKU_KUNSHU;
	pThis->EndModalLoop(ID_KANKOKU_KUNSHU);
}

void	GaikouKankokuWindow::OnBushou(GaikouKankokuWindow* pThis)
{
	pThis->m_unCtrlID = ID_KANKOKU_BUSHOU;
	pThis->EndModalLoop(ID_KANKOKU_BUSHOU);
}

/* \202\156\202\152\203\173\203\136\203\223\202\252\211\237\202\271\202\351\202\251 */
BOOL	GaikouKankokuWindow::ChkOkButton(VOID)
{
	if ( pkkNull == m_pkkTgt ) {
		return FALSE;
	}
	if ( pkbNull == m_pkb ) {
		return FALSE;
	}
	return TRUE;
}

VOID	GaikouKankokuWindow::OnOkButton(VOID)
{
	if ( !ChkOkButton() ) {
		return;
	}
	SetKankoku();
	EndModalLoop(IDOK);
}

/* \214\210\222\350 */
void	GaikouKankokuWindow::OnOk(GaikouKankokuWindow* pThis)
{
	pThis->OnOkButton();
}

/* \222\206\216\176 */
void	GaikouKankokuWindow::OnCancel(GaikouKankokuWindow* pThis)
{
	pThis->EndModalLoop(IDCANCEL);
}

/* \217\343\203\160\203\142\203\150\202\252\211\237\202\263\202\352\202\275 */
void GaikouKankokuWindow::PushPadUp(void)
{
	UINT	uCtrlID = CDialog::GetSelectedCtrlID();	/* \221\111\221\360\202\263\202\352\202\304\202\242\202\351\203\122\203\223\203\147\203\215\201\133\203\213\202\150\202\143\216\346\223\276 */
	UINT	newCtrlID = uCtrlID;

	switch	( uCtrlID ) {
	case ID_KANKOKU_KUNSHU:
		newCtrlID = ID_KANKOKU_OK;
		break;
	case ID_KANKOKU_OK:
	case ID_KANKOKU_CANCEL:
		newCtrlID = ID_KANKOKU_BUSHOU;
		break;
	default:
		CDialog::PushPad(PADKEY_UP);
		return;
	}
	SelectCommand(newCtrlID);
}

/* \211\272\203\160\203\142\203\150\202\252\211\237\202\263\202\352\202\275 */
void GaikouKankokuWindow::PushPadDown(void)
{
	UINT	uCtrlID = CDialog::GetSelectedCtrlID();	/* \221\111\221\360\202\263\202\352\202\304\202\242\202\351\203\122\203\223\203\147\203\215\201\133\203\213\202\150\202\143\216\346\223\276 */
	UINT	newCtrlID = uCtrlID;

	switch	( uCtrlID ) {
	case ID_KANKOKU_BUSHOU:
		newCtrlID = ID_KANKOKU_OK;
		break;
	case ID_KANKOKU_OK:
	case ID_KANKOKU_CANCEL:
		newCtrlID = ID_KANKOKU_KUNSHU;
		break;
	default:
		CDialog::PushPad(PADKEY_DOWN);
		return;
	}
	SelectCommand(newCtrlID);
}

/* \215\266\203\160\203\142\203\150\202\252\211\237\202\263\202\352\202\275 */
void GaikouKankokuWindow::PushPadLeft(void)
{
	UINT	uCtrlID = CDialog::GetSelectedCtrlID();	/* \221\111\221\360\202\263\202\352\202\304\202\242\202\351\203\122\203\223\203\147\203\215\201\133\203\213\202\150\202\143\216\346\223\276 */
	UINT	newCtrlID = uCtrlID;

	if ( ID_KANKOKU_OK == uCtrlID ) {
		newCtrlID = ID_KANKOKU_CANCEL;
	}
	else if ( ID_KANKOKU_CANCEL == uCtrlID ) {
		newCtrlID = ID_KANKOKU_OK;
	}
	SelectCommand(newCtrlID);
}

/* \211\105\203\160\203\142\203\150\202\252\211\237\202\263\202\352\202\275 */
void GaikouKankokuWindow::PushPadRight(void)
{
	UINT	uCtrlID = CDialog::GetSelectedCtrlID();	/* \221\111\221\360\202\263\202\352\202\304\202\242\202\351\203\122\203\223\203\147\203\215\201\133\203\213\202\150\202\143\216\346\223\276 */
	UINT	newCtrlID = uCtrlID;

	if ( ID_KANKOKU_OK == uCtrlID ) {
		newCtrlID = ID_KANKOKU_CANCEL;
	}
	else if ( ID_KANKOKU_CANCEL == uCtrlID ) {
		newCtrlID = ID_KANKOKU_OK;
	}
	SelectCommand(newCtrlID);
}

/* \203\160\203\142\203\150\202\252\211\237\202\263\202\352\202\275 */
void GaikouKankokuWindow::PushPad(int nPadID)
{
	switch ( nPadID ) {
	case PADKEY_UP :
		PushPadUp();
		return;
	case PADKEY_DOWN :
		PushPadDown();
		return;
	case PADKEY_LEFT :
		PushPadLeft();
		return;
	case PADKEY_RIGHT :
		PushPadRight();
		return;
	case PADKEY_START :
		if ( !ChkOkButton() ) {
			return;
		}
		SelectAndPush(ID_KANKOKU_OK);
		return;
	default :
		break;
	}
	CDialog::PushPad(nPadID);
}

VOID	GaikouKankokuWindow::Jogen(VOID)
{
	char	buf[256];

	if ( !ChkOkButton() ) {
		return;
	}
	if ( ACTIVE(m_pkbGunshi) ) {
		if ( (pkbNull == m_pkb) || (pkkNull == m_pkkTgt) ) {
			return;
		}
		if ( (m_pkbOld == m_pkb) && (m_pkkTgtOld == m_pkkTgt) ) {
			return;
		}
		m_pkbOld		= m_pkb;
		m_pkkTgtOld		= m_pkkTgt;
		BOOL	f1, f2;
		GaikouDataConfig	kgdc;
		InitGaikouDataConfig(&kgdc);
		SetGaikouData(&kgdc);
		f1 = isComKankokuSeikou(&kgdc);
		f2 = AdviceGunshi(m_pkbGunshi, m_pkb->iNum(), f1);
		if ( m_pkkTgt->isJuuzoku(m_pkk) ) {
			if ( f2 ) {
				sprintf(buf, msgmgrDoMessage(MSG_e_gykankoku1, 3, m_pkbGunshi, m_pkb, m_pkkTgt->pkbBushou()));
			}
			else {
				sprintf(buf, msgmgrDoMessage(MSG_e_gnkankoku1, 3, m_pkbGunshi, m_pkb, m_pkkTgt->pkbBushou()));
			}
		}
		else {
			if ( f2 ) {
				sprintf(buf, msgmgrDoMessage(MSG_e_gykankoku2, 3, m_pkbGunshi, m_pkb, m_pkkTgt->pkbBushou()));
			}
			else {
				sprintf(buf, msgmgrDoMessage(MSG_e_gnkankoku2, 3, m_pkbGunshi, m_pkb, m_pkkTgt->pkbBushou()));
			}
		}
		BushouMsg(m_pkbGunshi, buf);
	}
}

/******************************* dkanwin.cpp *********************************/